package chapter10;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class Java02_Reflect_ClassLoader {
    public static void main(String[] args) {
        // TODO 反射 - 类加载器

        // 加载类
        /**
         * Java中的类主要分为3种：
         * 1.Java核心类库中的类：String，Object
         * 2.JVM软件平台开发商
         * 3.用户自定义的类：User，Child
         */

        /**
         * 类加载器分为3种
         * 1.BootClassLoader：启动类加载器，加载java核心类库,加载类时采用操作系统平台语言实现
         * 2.PlatformClassLoader：平台类加载器，加载JVM软件平台开发商提供的类库
         * 3.AppClassLoader：应用类加载器，加载用户自定义的类库
         */

        // TODO 获取类的信息
        Class<Student> studentClass = Student.class;

        // 获取类的加载器对象
        ClassLoader classLoader = studentClass.getClassLoader();
        System.out.println(classLoader);    // jdk.internal.loader.ClassLoaders$AppClassLoader@63947c6b
        System.out.println(classLoader.getParent());    // jdk.internal.loader.ClassLoaders$PlatformClassLoader@4eec7777
        System.out.println(classLoader.getParent().getParent());    // null
        System.out.println("-----------------------");

        Class<String> stringClass = String.class;
        ClassLoader classLoader1 = stringClass.getClassLoader();
        System.out.println(classLoader1);   // null

        // 加载顺序：加载核心类库 -> 平台类库 -> 自己类
    }
}
class Student {

}